3-way BLE-UART bridge
port.STD  0 (UART0)    stm32f103x (UART0) self driving robot
port.TEE  1 (UART1)    LoRa radio
port.ALT 16 (BLE UART) nrf52840dk UART

DBG_UART_INTERFACE  := 0    # stdout, stdin (UART0)
ERR_UART_INTERFACE  := 0    # stderr        (UART0)
DBG_TEE_INTERFACE   := -1   # stdout copy   (disabled)
ERR_TEE_INTERFACE   := -1   # stderr copy   (disabled)

make SD=1 BOARD=nrf52840dk_nrf52840 APP=examples/uart/ble flash_sd prog

# nrf52840dk starting...

# nano RTOS (C) 2022-2026 nanortos.com
# BLE to STD IN/OUT bridge example  STD 0  TEE 1  ALT 16

G
cs={"h": 136,"z_ang":   0,"e":"00"}
ci={"dec":  588,"inc": 5975}

c={"h":142,"x":-0.03,"y":-0.05,"z":10.0}
c={"h":142,"x":-0.03,"y":-0.05,"z":10.0}
c={"h":142,"x":-0.03,"y":-0.05,"z":10.0}
c={"h":142,"x":-0.03,"y":-0.05,"z":10.0}
c={"h":142,"x":-0.03,"y":-0.05,"z":10.0}
c={"h":142,"x":-0.03,"y":-0.05,"z":10.0}

R
stm32f103x starting...

nano RTOS (C) 2022-2024 nanortos.com
i2c[0] ready

dec    +588
inc   +5975
x_min  -287
y_min  -367
z_min  -577
x_max  +308
y_max  +221
z_max  +431
xv_min -500
yv_min -577
xv_max +520
yv_max +431

uart_input started
hmc5883 configured
GPS configured  115200

pid={"p":27,"i":36,"d":12,"df":90,"dl":45,"il":30,"slew_rate":12,"range":90,"view":16,"esc_slow":105,"esc_turn":140,"esc":180}
ch1={"pulse_min":1180,"pulse_max":1910,"trim":1503,"diff":0,"reverse":0}
ch2={"pulse_min":1000,"pulse_max":2000,"trim":1500,"diff":0,"reverse":1}
bat={"low":3200,"high":4050,"pack":4500}

a90
p90
0   426570347 233551153
1   426570506 233550881
2   426570884 233551753
3   426570632 233558476
4   426570862 233558931
5   426570605 233555548
6   426570042 233555524
7   426570124 233558457
8   426570736 233555792
9   426570641 233550183
10  426570162 233559422
11  426570601 233559221
12  426570788 233553291
13  426570807 233552004
14  426570587 233551653
15  426570768 233551063
loop: 0
battery: 8224
status: init

mpu6050 configured
cs={"h": 360,"z_ang":   0,"e":"00"}
ci={"dec":  588,"inc": 5975}

?
self driving robot
I[1-2]     print debug info
a[0-180]   set angle
p[0-180]   set power
A[1000-2000]   joystick angle µs
P[1000-2000]   joystick power µs
o[0-3][01] output clear or set
o[0-3][RT] output read or toggle
oR         output read all
o[WT][0-f] output write or toggle all
b          battery voltage
[          previous waypoint
]          next waypoint
l          toggle loop waypoints
h          toggle return to home
g[0-15]    activate waypoint navigation
!s[0-15]   store trajectory point
!e[0-15|*] erase goal
q          stop navigation
m          return position
w          print waypoints

compass
C  calibrate
D  reset calibration default
L  load calibration
d[-8000..8000]  declination
i[-8000..8000]  inclination
[di]q  query declination
[di]s  save declination
B  toggle GPS bridge
E  toggle print errors
G  toggle print compass
H  toggle print heading
M  toggle magnetic heading
W  toggle PWM tracking
T  toggle GPS tracking
U  toggle user control
u  enable user control
c  toggle compensate
2  2D calibration mode
3  3D calibration mode
f[0-99|?]  print delay fast [ms]
F[0-99|?]  print delay slow [ms]
j  ping from iOS app,   replays with k
J  ping from RC screen, replays with K
#  comment: ignore this line
>  compass dump state
<  dump registers for all tasks
<# dump registers for task #
\ check tasks for active status

N? NAV config help

N?

pid={"p":27,"i":36,"d":12,"df":90,"dl":45,"il":30,"slew_rate":12,"range":90,"view":16,"esc_slow":105,"esc_turn":140,"esc":180}
ch1={"pulse_min":1180,"pulse_max":1910,"trim":1503,"diff":0,"reverse":0}
ch2={"pulse_min":1000,"pulse_max":2000,"trim":1500,"diff":0,"reverse":1}
bat={"low":3200,"high":4050,"pack":4500}


NQ  query NAV config
NL  load NAV config
NS  save
NE  erase

NBL[2500-3300]  battery low voltage
NBH[3500-4500]  battery high voltage
NBP[3760-4760]  increment cell count past this voltage
N[1-2]R  reverse PWM channel
N[1-2]D  differential PWM steering
N[1-2]A[1000-1500]  set pulse_min
N[1-2]B[1500-2000]  set pulse_max
N[1-2]T[1350-1650]  set or toggle trim

NP[PIDFLlRvrSTE] PID config
NPP[1-99]    PID proportional / 10
NPI[1-99]    PID 1 / integral
NPD[0-99]    PID derivative
NPF[0-99]    PID D low-pass filter / 100
NPL[1-80]    PID D limit
NPl[1-80]    PID I limit
NPr[1-80]    PID out slew rate
NPR[20-90]   PID out range
NPv[10-180]  PID view in which ID are active
NPS[ 90-180] ESC min speed near target
NPT[100-180] ESC speed during turn
NPE[100-180] ESC max speed


<

task 0        200001e8  main
	r0    0069a138  r1     00000000  r2   00000085  r3   00000000
	r4    c37e5ec8  r5     c3340000  r6   43b40000  r7   20000e59
	r8    200001ba  r9     20000b19  r10  20000a88  r11  dbdbdbdb
	r12   ff80d09c  lr     080048d5  pc   0801257c  xpsc 21002800
	sp    20003400  object 00000000  cond        0  wait        0
	rem   00000000  00000000         time 00000000  00000000
	stack 20003498  state         0  restart     0


task 1        20000258  compass
	r0    00000000  r1     00000000  r2   00000000  r3   00000000
	r4    00000000  r5     20000174  r6   00000001  r7   00000001
	r8    00000007  r9     20000258  r10  00000000  r11  dbdbdbdb
	r12   200001e8  lr     0800d42d  pc   0800bf62  xpsc 41000000
	sp    20002bf0  object 00000000  cond        0  wait        0
	rem   00000000  00000000         time 00000000  00000000
	stack 20002c98  state         0  restart     0


task 2        200002c8  input
	r0    00000000  r1     00000000  r2   200002c8  r3   ffffffff
	r4    00000000  r5     200006b4  r6   00000002  r7   20002458
	r8    20003898  r9     000000ff  r10  00000007  r11  dbdbdbdb
	r12   90000000  lr     0800dd1d  pc   0800bf62  xpsc a1000000
	sp    200023d8  object 00000000  cond        0  wait       -1
	rem   00000000  00000000         time 00000000  00000000
	stack 20002498  state        -1  restart     0


task 3        20000338  GPS
	r0    00000000  r1     00000000  r2   20000338  r3   ffffffff
	r4    00000000  r5     200006b4  r6   00000003  r7   20002004
	r8    20003d08  r9     000000ff  r10  00059ccc  r11  dbdbdbdb
	r12   00000070  lr     0800dd1d  pc   0800bf62  xpsc a1000000
	sp    20001fa0  object 00000000  cond        0  wait       -1
	rem   00000000  00000000         time 00000000  00000000
	stack 20002098  state        -1  restart     0


task 4        200003a8  motor
	r0    200003a8  r1     d1d1d1d1  r2   d2d2d2d2  r3   d3d3d3d3
	r4    d4d4d4d4  r5     d5d5d5d5  r6   d6d6d6d6  r7   d7d7d7d7
	r8    d8d8d8d8  r9     d9d9d9d9  r10  dadadada  r11  dbdbdbdb
	r12   dcdcdcdc  lr     0800df89  pc   0800df89  xpsc 61000000
	sp    20001c98  object 00000000  cond        0  wait        0
	rem   00000000  00000000         time 00000000  00000000
	stack 20001c98  state       -16  restart     0


task 5        20000418  print
	r0    fffffff0  r1     00000070  r2   000000f0  r3   080064e5
	r4    fffffff0  r5     d5d5d5d5  r6   d6d6d6d6  r7   d7d7d7d7
	r8    d8d8d8d8  r9     d9d9d9d9  r10  dadadada  r11  dbdbdbdb
	r12   90000000  lr     0800df9b  pc   0800bf62  xpsc 21000000
	sp    20001a90  object 00000000  cond        0  wait        0
	rem   00000000  00000000         time 00000000  00000000
	stack 20001a98  state       -16  restart     0


task 6        20000488  print_nav
	r0    00000000  r1     00000000  r2   000000f9  r3   00000001
	r4    c553ef3c  r5     00000000  r6   20000488  r7   00000000
	r8    00000009  r9     00000000  r10  00000000  r11  dbdbdbdb
	r12   90000000  lr     0800df25  pc   0800bf62  xpsc 81000000
	sp    20001570  object 00000000  cond        0  wait        0
	rem   00000000  00000000         time 00000000  00000000
	stack 20001698  state         1  restart     0
